
********************************
■■■■
■ ■ ■ ■
■ ■■■ ■■■
■ ■ ■ ■
■■■■
〜基礎から ★ C++Programing〜
********************************
【注意】 このマガジンは、最大化してお読みください。
また、等角フォントでお読みください。
(MS ゴシックなど)
********************************
発行者 むーくん
マガジンNO. 72(5−12)
発行日 2001/2/21
講読人数 2000名ぐらい
マガジンID 0000050494
このマガジンは、まぐまぐから配信されています。
********************************
★あいさつ★
自転車で駆けるのが気持ちよくなってきました。
そろそろ春ですね。まだ早い?
たっぷり食べて、今から元気をつけたいですね!!
********************************
********************************
★目次★
・ネスト
・サンプルプログラム
・処理に手間取る例
・用語解説
・予告
********************************
★ネスト★
if文などと同様に、ループ文もネスト(入れ子)が可能です。
ちょっとしたアルゴリズムを記述するときは、よく使用します。
カウンタを2重に張ることができますが、
処理の流れをよく考えて、混乱しないようにしましょう。
********************************
★サンプルプログラム★
・九九の表を作成します。
#include<iostream>
using namespace std;
int main(void){
int i,j;
for(i=1; i<=9; i++){
for(j=1; j<=9; j++){
cout.width(4); /* 4桁に揃える */
cout << i*j;
}
cout << endl;
}
return 0;
}
【解説】
cout.width()は、表を見やすく揃えているだけです。
「用語解説」を参照してください。
処理を追ってみましょう。
ループを内側から考えてみると分かりやすくなります。
j が1から始まり、10まで来ると、内側のループが終了します。
このとき、まだ i の値は、1です。
次の行のcoutで改行されると、
外側のforループに戻り、i がインクリメントされて、
i の値は2になります。
そして、また内側のforループが始まります。
注意するのは、10まで進んだ j ももう一度初期化されて
0になっているということです。
また j が1〜10まで繰り返され、改行され、
i を3にインクリメントし・・・・
と続きます。
こうして、内側のforを9回、
それを外側のforが9回繰り返しているのです。
☆ 今まではforの初期化は、一回しか見られませんでしたが、
ネストすると、内側のforの初期化は、
複数回おきることに注意してください。
【変数の動き・図説】
i | 1 1 1 1 1 1 1 1 1 2 2 2 2 ……
j | 1 2 3 4 5 6 7 8 9 1 2 3 4 ……
−−+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
答え| 1 2 3 4 5 6 7 8 9 2 4 6 8 ……
********************************
★処理に手間取る例★
これだけでもかなり複雑になることが分かったでしょう。
繰り返し回数が外と中で同じなら、全体で回数はその2乗になります。
3重ループなら、回数はなんと3乗です!
場合によっては、深刻な速度低下につながることもあります。
・1000回ずつのループを3重にしています。
繰り返し回数を表示するプログラムです。
#include<iostream>
using namespace std;
int main(void){
int i,j,k
long count;
count=0;
for(i=0; i<1000; i++){
for(j=0; j<1000; j++){
for(k=0; k<1000; k++){
count++;
}
}
}
cout << "繰り返し回数は、" << count <<endl;
return 0;
}
【解説】
実行してみたら分かりますが、少し実行に時間がかかるようです。
なんと繰り返し回数は、10億回!
同じ要領でループは何重にもすることができますが、
爆発的に実行回数が増えていることがあるので、
よく注意してください。
また、環境によっては、10億という数値は int型には
入りきらないので long型を使っています。
数字の桁あふれにも十分注意しましょう。
********************************
★用語説明★
cout.width(n)
表示けた数の最小値を設定する関数です。
n で指定した数値のけた数で表示されますが、
オーバーしたときは無視されます。
今回は、最大で2けたなので、4で十分でした。
cout.precision(n)
以前学習したものの復習です。
こちらは、小数点の最大表示けた数を設定します。
********************************
★予告★
for while do-while の関係を学習します。
********************************
********************************
講読解除はこちら
http://members.tripod.co.jp/mukun_mmg/mmg/cpp.html
バックナンバーはこちら
http://members.tripod.co.jp/mukun_mmg/mmg/cpp.html
内容について質問やご意見など
smukun@hotmail.com
筆者のWebサイト(むーくんの理学的なんでも講座)
http://members.tripod.co.jp/mukun_mmg/
************************************